#include "get_can_data.h"
#include <QDebug>
#include <QQueue>
#include <QString>
#include <QDateTime>
#include "widget.h"


int g_data1[8]={0};
int g_data2[8]={0};

/*
 * 获取CAN数据
 */
QDateTime current_date_time;
QQueue<VCI_CAN_OBJ> RcvDataBuffer;

#define VCI_USBCAN  VCI_USBCAN1
#define m_DevIndex 0

void Get_CAN_Data:: run()
{
    static VCI_ERR_INFO errinfo;
    while (1)
    {
        msleep(10);//延时25ms 再去收can数据
        VCI_CAN_OBJ Recv[200];
        DWORD Recv_Len;
        if(run_state)
        {
            //返回实际读取到的帧数
            Recv_Len=VCI_Receive(VCI_USBCAN, m_DevIndex,0,Recv,50,200);
            if(Recv_Len<0)
            {
                //注意：如果没有读到数据则必须调用此函数来读取出当前的错误码，
                //千万不能省略这一步（即使你可能不想知道错误码是什么）
                VCI_ReadErrInfo(VCI_USBCAN,m_DevIndex,0,&errinfo);
                //qDebug()<<"接收失败";
            }
            else if(Recv_Len>0)
            {
                TimeOut=0;
                for(DWORD i=0;i<Recv_Len;i++){
                    RcvDataBuffer.enqueue(Recv[i]);
                }
            }
        }
    }
}



void Get_CAN_Data::close_Device()
{
    run_state = ! run_state;
}


QString Any_CAN_Data::hex2Str(unsigned char *in, int len)
{
    QString s;
    for(int i=0;i<len;i++)
    {
        s+=QString("%1").arg(in[i]&0xFF,2,16,QLatin1Char('0')).toUpper();//toUpper，小写转大写
        s.append(" ");//追加空格
    }
    return s;
}

void Any_CAN_Data:: run()
{
    while(1)
    {
        VCI_CAN_OBJ curdata;        
        msleep(1000);//延时25ms 再去收can数据
        while(!RcvDataBuffer.isEmpty())
        {
            curdata=RcvDataBuffer.dequeue();
            QString current_time = QDateTime::currentDateTime().toString("hh:mm:ss.zzz ");
            if(curdata.ID==(0xc0350f4))
            {
                for(int i=0;i<8;i++)
                {
                    g_data1[i]=curdata.Data[i];
                }

            }else if(curdata.ID==(0xc0450f4))
            {
                for(int i=0;i<8;i++)
                {
                    g_data2[i]=curdata.Data[i];
                }
            }
            qDebug()<<current_time+" rcv id="+QString::number(curdata.ID,16)+" "+hex2Str(curdata.Data,curdata.DataLen);
        }
    }
}
